package com.manong.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.manong.dao.UserMapper;
import com.manong.entity.SysNotice;
import com.manong.dao.SysNoticeMapper;
import com.manong.entity.User;
import com.manong.service.SysNoticeService;
import com.manong.vo.CommonReqVo;
import com.manong.vo.SysNoticeVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

/**
 * 资产(SysNotice)表服务实现类
 *
 */
@Service("sysPropertyService")
public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements SysNoticeService {


    @Resource
    private UserMapper userMapper;

    @Override
    public IPage<SysNoticeVo> listAll(CommonReqVo commonReqVo) {

        // 分页操作
        IPage<SysNotice> page = new Page<SysNotice>(commonReqVo.getPageNo(),
                commonReqVo.getPageSize());
        // 组装查询条件
        LambdaQueryWrapper<SysNotice> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//      like查询条件 ， select * from student where title like '%abc%'
        // StringUtils.isNotBlank(commonReqVo.getKey()) 判断 commonReqVo.getKey()是否等于null或者空字符串
//        如果 不为空就添加这个like查询条件，否则不添加查询条件
        /**
         * 类似于
         * if(StringUtils.isNotBlank(commonReqVo.getKey())){
         *  lambdaQueryWrapper.like( SysNotice::getTitle, commonReqVo.getKey());
         * }
         *
         *
         */
        // title like '%abc%'
        lambdaQueryWrapper.like(StringUtils.isNotBlank(commonReqVo.getKey()), SysNotice::getTitle, commonReqVo.getKey());
        // where title='aaa'
//        lambdaQueryWrapper.eq(SysNotice::getTitle,"aaa");
        // userId > 100
//        lambdaQueryWrapper.ge(SysNotice::getUserId,100);
        // select * from user where name='zhangsan' and age >100
        // select * from sys_notice where title like '%asdas%'

        //selectList：查询所有符合条件的记录列表。
        final List<User> users = userMapper.selectList(new QueryWrapper<>());
        final IPage<SysNotice> page1 = this.page(page, lambdaQueryWrapper);

        // SysNotice 中不存在 username字段，需要新创建一个 page对象
        IPage<SysNoticeVo> iPage=new Page<>();
        BeanUtils.copyProperties(page1,iPage);
        List<SysNoticeVo> sysNoticeVos =new ArrayList<>();
//        遍历 page1中的分页集合对象，填充username属性
        for (SysNotice record : page1.getRecords()) {
            SysNoticeVo one=new SysNoticeVo();
            // 复制属性
            BeanUtils.copyProperties(record,one);
//            拿到userId，再根据userId获取userName
            final Long userId = record.getUserId();
//            根据suerId 从 users中过滤出指定userid的记录，并从中取得username属性
            final Optional<User> first1 = users.stream()
                    .filter(u -> Objects.equals(u.getId(), userId))
                    .findFirst();
// 如果找到了一个userid为指定值的记录，就填充 username，否则不填充username
            if (first1.isPresent()) {
                final String username = first1.get().getUsername();
                one.setUserName(username);
            }

            sysNoticeVos.add(one);
        }
        iPage.setRecords(sysNoticeVos);

        return iPage;
    }
//根据主键id
    @Override
    public Boolean delete1(CommonReqVo commonReqVo) {
        return this.removeBatchByIds(commonReqVo.getMainIds());
    }

    @Override
    public Boolean save1(SysNotice sysNotice) {
        //        之间调用 mybatis的 更新或者保存方法，进行更新或者保存
//        注意，根据主键id是否存在，以及主键id是否在数据库中存在来判断更新或者插入，
        return this.saveOrUpdate(sysNotice);
    }
}
